package LogicaClasesNew;


import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlTransient;

@XmlAccessorType(XmlAccessType.FIELD)
@Entity
public class Categoria implements Serializable{

@XmlElement
@Id
private String Nombre;

@XmlElement
private Boolean tieneproductos; // Bandera para saber si contiene productos o no
    //ENTITY RELATIONSHIP YET NOT DEFINED
@XmlElement
private Categoria padre;

@XmlTransient
//@XmlElement
@OneToMany
private List<Producto> listadoproducto; // Lista de productos 

@XmlTransient
//@XmlElement
@OneToMany
private List<Categoria> listadocategoria; // Lista de categorias

   
    
    //**************FIN ATRIBUTOS***********************************************
        
    
    //CONSTRUCTORES*************************************************************
    //por defecto se crea categoria sin padre
public Categoria(String Nombre, Boolean tieneproductos) {
        this.Nombre = Nombre;
        this.tieneproductos = tieneproductos;
        listadoproducto = new ArrayList<Producto>();
        listadocategoria = new ArrayList<Categoria>();
        //this.padre=null;
        //this.nombrepadre = nombrepadre;
    }
      
public Categoria() {
        listadoproducto = new ArrayList<Producto>();
        listadocategoria = new ArrayList<Categoria>();
        //this.padre=Null;
    }

public List<Producto> getListadoProducto() {
        return listadoproducto;
    }
    
public List<Categoria> getListadoCategoria() {
        return listadocategoria;
    }
//Agregar un producto
public void addProducto(Producto producto) {
        listadoproducto.add(producto);
    }
    
public void removeProducto(Producto producto){
        listadoproducto.remove(producto);
    }
    
public void addCategoria(Categoria categoria) {
        listadocategoria.add(categoria);
    }

public void removeProdCat(Producto prod) {
        listadoproducto.remove(prod);
    }
    
public String getNombre() {
        return Nombre;
    }

public void setPadre(Categoria padre) {
        this.padre = padre;
    }
    
public void setNombre(String Nombre) {
        this.Nombre= Nombre;
    }
    
public Boolean getTieneProductos() {
        return tieneproductos;
    }

public void setTieneProductos(Boolean tieneproductos) {
        this.tieneproductos = tieneproductos;
    }
    
public String getNombrePadre() {
        return padre.getNombre();
    }

@Override
public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Categoria)) {
            return false;
        }
        Categoria other = (Categoria) object;
        if ((this.Nombre == null && other.Nombre != null) || (this.Nombre != null && !this.Nombre.equals(other.Nombre))) {
            return false;
        }
        return true;
    }

}
